package cn.iocoder.yudao.module.resource.api;

import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.resource.api.model.userpreference.UserPreferenceDTO;
import cn.iocoder.yudao.module.resource.api.model.userpreference.UserPreferenceSaveReqDTO;
import cn.iocoder.yudao.module.resource.controller.admin.userpreference.vo.UserPreferenceSaveReqVO;
import cn.iocoder.yudao.module.resource.dal.dataobject.userpreference.UserPreferenceDO;
import cn.iocoder.yudao.module.resource.service.userpreference.UserPreferenceService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

@Service
public class UserPreferenceApiImpl implements IUserPreferenceApi {
    @Resource
    private UserPreferenceService userPreferenceService;

    @Override
    public UserPreferenceDTO getUserPreferenceByUserId(Long userId) {
        return BeanUtils.toBean(userPreferenceService.getUserPreferenceByUserId(userId), UserPreferenceDTO.class);
    }

    @Override
    public void updateUserPreferenceByUserId(UserPreferenceSaveReqDTO updateReqVO) {
        final UserPreferenceDO userPreference = userPreferenceService.getUserPreferenceByUserId(updateReqVO.getUserId());
        if (userPreference == null) {
            final UserPreferenceSaveReqVO req = BeanUtils.toBean(updateReqVO, UserPreferenceSaveReqVO.class);
            req.setId(IdUtil.objectId());
            userPreferenceService.createUserPreference(req);
        } else {
            userPreferenceService.updateUserPreferenceByUserId(BeanUtils.toBean(updateReqVO, UserPreferenceSaveReqVO.class));
        }
    }

    @Override
    public void updateUserPreferenceById(String id, UserPreferenceSaveReqDTO updateReqVO) {
        final UserPreferenceSaveReqVO req = BeanUtils.toBean(updateReqVO, UserPreferenceSaveReqVO.class);
        req.setId(id);
        userPreferenceService.updateUserPreference(req);
    }

    @Override
    public String createUserPreference(UserPreferenceSaveReqDTO createReqVO) {
        return userPreferenceService.createUserPreference(BeanUtils.toBean(createReqVO, UserPreferenceSaveReqVO.class));
    }

    @Override
    public UserPreferenceDTO getOrCreateUserPreference(Long userId) {
        UserPreferenceDTO userPreference = getUserPreferenceByUserId(userId);
        if (userPreference == null) {
            final UserPreferenceSaveReqDTO req = UserPreferenceSaveReqDTO.builder()
                    .userId(userId)
                    .threeAxisSensorMaxChange(0)
                    .build();
            final String id = createUserPreference(req);
            userPreference = BeanUtils.toBean(req, UserPreferenceDTO.class);
            userPreference.setId(id);
        }
        return userPreference;
    }
}
